# -*- coding: utf-8 -*-
from sprManager.models import Wytyczne, Przedmiot, Sprawozdanie, Ocena
from sprManager.forms import AddWytyczne, AddPrzedmiot, AddSprawozdanie, Ocen
from auth.models import Profil

from django.contrib.auth.decorators import login_required


from django.http import HttpResponse
from django.shortcuts import render_to_response
from django.template import RequestContext

def reqUser(request):
    try:
        dataProfil=Profil.objects.get(user=request.user)
    except Profil.DoesNotExist:
        message="nie istnieje"
    return dataProfil

def report(request):
    return



@login_required
def addWyt(request):    #dodac lapanie bledow
    dataProfil=reqUser(request)
    if dataProfil.isNauczyciel():
        if request.method=='POST':
            form=AddWytyczne(request.POST)
            if form.is_valid():
                form=form.cleaned_data
                data=Wytyczne()
                data.przedmiot=form['przedmiot']
                data.tresc=form['tresc']
                data.nauczyciel=Profil.objects.get(user=request.user)
                data.save()
                return render_to_response("wzorce.html", {"message":u"Dodano pomyślnie wytyczną.",'user':request.user},
                               context_instance=RequestContext(request))
            else: return render_to_response("wzorce.html", {'message':'dane nie poprawne!', 'form':form,'user':request.user},
                               context_instance=RequestContext(request))
        else: 
            form=AddWytyczne()
            return render_to_response("wzorce.html", {'form':form,'user':request.user},
                               context_instance=RequestContext(request))
    else:
        return render_to_response("home.html", {"message":"brak uprawnien",'user':request.user})
            
@login_required
def updWyt(request, id_wyt=-1):
    dataProfil=reqUser(request)
    if dataProfil.isNauczyciel()==False:
        report(request)
        return render_to_response("home.html", {"message":u"brak uprawnień, raport został przesłany do administratora",
                                  "user":request.user})
    if request.method=='POST':
        form=AddWytyczne(request.POST)
        if form.is_valid():
            form=form.cleaned_data
            try:
                data=Wytyczne.objects.get(pk=id_wyt)
            except Wytyczne.DoesNotExist:
                return render_to_response("wzorce.html", {'message':'Wytyczna nie istnieje!', 'user':request.user},
                    context_instance=RequestContext(request))
            data.przedmiot=form['przedmiot']
            data.tresc=form['tresc']
            data.nauczyciel=Profil.objects.get(user=request.user)
            data.save()
            return render_to_response("wzorce.html", {"message":u"Pomyślnie dokonano edycji.",'user':request.user},
                                      context_instance=RequestContext(request))
        else: return render_to_response("wzorce.html", {'message':'dane nie poprawne!', 'form':form,'user':request.user},
                                        context_instance=RequestContext(request))
    else: 
        form=AddWytyczne()
        try:
            data=Wytyczne.objects.get(pk=id_wyt)
            if data.nauczyciel!=reqUser(request):
                return render_to_response("wzorce.html", {'message':'Podana wytyczna nie należy do Ciebie!','user':request.user},
                                        context_instance=RequestContext(request))
            form=AddWytyczne({'tresc':data.tresc,'przedmiot':data.przedmiot})
            return render_to_response("wzorce.html", {'form':form,'user':request.user},
                                      context_instance=RequestContext(request))
        except Wytyczne.DoesNotExist:
            return render_to_response("wzorce.html", {'message':'Wytyczna nie istnieje!','user':request.user},
                                        context_instance=RequestContext(request))
    
    return render_to_response("wzorce.html", {'message':'Coś poszło nie tak, skontaktuj się z administratorem!','user':request.user},
                                        context_instance=RequestContext(request))

@login_required
def delWyt(request, id_wyt=-1):
        message="Nie podano wytycznej do usunięcia."
        if id_wyt>0:
            try:
                dataProfil=Profil.objects.get(user=request.user)
                dataWyt=Wytyczne.objects.get(id=id_wyt)
            except Wytyczne.DoesNotExist:
                message="Wytyczna o podanym ID nie istnieje"
                return render_to_response("wzorce.html", {'message':message})
                
            if dataProfil.isNauczyciel():
                if dataWyt.nauczyciel!=dataProfil:
                    return render_to_response("wzorce.html", {'message':'Podana wytyczna nie należy do Ciebie!', 'user':request.user},
                                        context_instance=RequestContext(request))
                dataWyt.delete()
                message=u"Usunięto wytyczną"

            return render_to_response("wzorce.html", {'message':message, 'user':request.user})
        
@login_required
def showWyt(request, id_wyt=-1):
    dataProfil=reqUser(request)
    if(id_wyt==-1):
        wytyczne=Wytyczne.objects.filter(nauczyciel=dataProfil)
        return render_to_response("wzorce.html", {'wytyczne':wytyczne, 'user':request.user})
    else:
        try:
            wytyczna=Wytyczne.objects.get(pk=id_wyt)
            if wytyczna.nauczyciel==dataProfil:
                return render_to_response("wzorce.html", {'wytyczna':wytyczna, 'user':request.user})
            else:
                return render_to_response("wzorce.html", {'message':'Wytyczna nie należy do Ciebie!', 'user':request.user})
        except Wytyczne.DoesNotExist:
            return render_to_response("wzorce.html", {'message':'Wytyczna nie istnieje!', 'user':request.user})
    
    
    

@login_required
def showPrzU(request, id_prz=-1):
    if reqUser(request).isNauczyciel():
        return showPrzN(request, id_prz)

    if(id_prz==-1):
        przedmioty=Przedmiot.objects.all()
        return render_to_response("przedmioty.html", {'przedmioty':przedmioty, 'user':request.user})
    else:
        try:
            przedmiot=Przedmiot.objects.get(pk=id_prz)
            return render_to_response("przedmioty.html", {'przedmiot':przedmiot, 'user':request.user})
        except Wytyczne.DoesNotExist:
            return render_to_response("wzorce.html", {'message':'Wytyczna nie istnieje!', 'user':request.user})
  

@login_required
def showPrzN(request, id_prz=-1):
    dataProfil=reqUser(request)
    if(id_prz==-1):
        przedmioty=Przedmiot.objects.all()
        return render_to_response("przedmioty.html", {'przedmioty':przedmioty, 'user':request.user, 'mod':'true'})
    else:
        try:
            przedmiot=Przedmiot.objects.get(pk=id_prz)
            return render_to_response("przedmioty.html", {'przedmiot':przedmiot, 'user':request.user, 'mod':'true'})
        except Wytyczne.DoesNotExist:
            return render_to_response("wzorce.html", {'message':'Wytyczna nie istnieje!', 'user':request.user})
    

@login_required
def addPrz(request):
    dataProfil=reqUser(request)
    if dataProfil.isNauczyciel():
        if request.method=='POST':
            form=AddPrzedmiot(request.POST)
            if form.is_valid():
                form=form.cleaned_data
                data=Przedmiot()
                data.nazwa=form['nazwa']
                data.godziny=form['godziny']
                data.nauczyciel=form['nauczyciel']
                data.save()
                return render_to_response("przedmioty.html", {"message":u"Dodano pomyślnie przedmiot.",'user':request.user},
                               context_instance=RequestContext(request))
            else: return render_to_response("przedmioty.html", {'message':'dane nie poprawne!', 'form':form,'user':request.user},
                               context_instance=RequestContext(request))
        else: 
            form=AddPrzedmiot()
            return render_to_response("przedmioty.html", {'form':form,'user':request.user},
                               context_instance=RequestContext(request))
    else:
        return render_to_response("home.html", {"message":"brak uprawnien",'user':request.user})
  
@login_required
def updPrz(request, id_przedmiotu=-1):
    dataProfil=reqUser(request)
    if dataProfil.isNauczyciel()==False:
        report(request)
        return render_to_response("home.html", {"message":u"brak uprawnień, raport został przesłany do administratora",
                                  "user":request.user})
    if request.method=='POST':
        form=AddPrzedmiot(request.POST)
        if form.is_valid():
            form=form.cleaned_data
            try:
                data=Przedmiot.objects.get(pk=id_przedmiotu)
            except Przedmiot.DoesNotExist:
                return render_to_response("przedmioty.html", {'message':'Przedmiot nie istnieje!', 'user':request.user},
                    context_instance=RequestContext(request))
            data.nazwa=form['nazwa']
            data.nauczyciel=form['nauczyciel']
            data.godziny=form['godziny']
            data.save()
            return render_to_response("przedmioty.html", {"message":u"Dokonano pomyślnie edycji przedmiotu.",'user':request.user},
                                      context_instance=RequestContext(request))
        else: return render_to_response("przedmioty.html", {'message':'dane nie poprawne!', 'form':form,'user':request.user},
                                        context_instance=RequestContext(request))
    else: 
        form=AddPrzedmiot()
        try:
            data=Przedmiot.objects.get(pk=id_przedmiotu)
            form=AddPrzedmiot({'nazwa':data.nazwa,'nauczyciel':data.nauczyciel,'godziny':data.godziny})
            return render_to_response("przedmioty.html", {'form':form,'user':request.user},
                                      context_instance=RequestContext(request))
        except Przedmiot.DoesNotExist:
            return render_to_response("przedmioty.html", {'message':'Przedmiot nie istnieje!', 'user':request.user},
                                        context_instance=RequestContext(request))
    
    return render_to_response("przedmioty.html", {'message':'Coś poszło nie tak, skontaktuj się z administratorem!', 'user':request.user},
                                        context_instance=RequestContext(request))

@login_required
def delPrz(request, id_przedmiotu=-1):
        message="Nie podano przedmiotu do usunięcia."
        if id_przedmiotu>0:
            try:
                dataProfil=Profil.objects.get(user=request.user)
                dataWyt=Wytyczne.objects.get(id=id_przedmiotu)
            except Wytyczne.DoesNotExist:
                message="Przedmiot o podanym ID nie istnieje"
                return render_to_response("przedmioty.html", {'message':message})
                
            if dataProfil.isNauczyciel():
                if dataWyt.nauczyciel!=dataProfil:
                    return render_to_response("przedmioty.html", {'message':'Podana przedmiot nie należy do Ciebie!', 'user':request.user},
                                        context_instance=RequestContext(request))
                dataWyt.delete()
                message=u"Usunięto przedmiot"

            return render_to_response("przedmioty.html", {'message':message, 'user':request.user})




@login_required
def showSprN(request, id_spr=-1):
    dataProfil=reqUser(request)
    if id_spr>0:
        try:
            data=Sprawozdanie.objects.get(pk=id_spr)
            return render_to_response("sprawozdania.html", {'user':request.user, 'spr':data})
        except Sprawozdanie.DoesNotExist:
            return render_to_response("sprawozdania.html", {'user':request.user, 'message':'Sprawozdanie nie istnieje!'})
    else:
        spr=Sprawozdanie.objects.filter(wytyczne__nauczyciel=dataProfil)
        return render_to_response("sprawozdania.html", {'user':request.user, 'sprawozdania':spr})

@login_required
def showSprU(request, id_spr=-1):
    dataProfil=reqUser(request)
    if(dataProfil.isNauczyciel()):
        return showSprN(request, id_spr)
    
    if(id_spr>0):
        try:
            spr=Sprawozdanie.objects.get(pk=id_spr)
            #sprawdzanie czy to moje sprawko
            return render_to_response("sprawozdania.html", {'user':request.user,'spr':spr})
        except Sprawozdanie.DoesNotExist:
            return render_to_response("sprawozdania.html", {'user':request.user, 'message':'Sprawozdanie nie istnieje!'})
    else:
        sprawozdania=Sprawozdanie.objects.filter(autorzy=dataProfil)
        return render_to_response("sprawozdania.html", {'user':request.user,'sprawozdania':sprawozdania})

@login_required
def addSpr(request):
    dataProfil=reqUser(request)
    if dataProfil.isNauczyciel()==False:
        if request.method=='POST':
            form=AddSprawozdanie(request.POST)
            if form.is_valid():
                form=form.cleaned_data
                data=Sprawozdanie()
                data.tytul=form['tytul']
                data.wytyczne=form['wytyczne']
                data.tresc=form['tresc']
                data.save()
                data.autorzy.add(dataProfil)
                data.save()
                return render_to_response("sprawozdania.html", {"message":u"Dodano pomyślnie sprawozdanie.",'user':request.user},
                               context_instance=RequestContext(request))
            else: return render_to_response("sprawozdania.html", {'message':'dane nie poprawne!', 'form':form,'user':request.user},
                               context_instance=RequestContext(request))
        else: 
            form=AddSprawozdanie()
            return render_to_response("sprawozdania.html", {'form':form,'user':request.user},
                               context_instance=RequestContext(request))
    else:
        return render_to_response("home.html", {"message":"Tylko uczniowie mogą dodawać nowe sprawozdania.",'user':request.user})

@login_required
def delSpr(request, id_spr=-1):
    message="Nie podano przedmiotu do usunięcia."
    if id_spr>0:
        try:
            dataProfil=reqUser(request)
            dataSpr=Sprawozdanie.objects.get(id=id_spr)
        except Sprawozdanie.DoesNotExist:
            message="Sprawozdanie o podanym ID nie istnieje"
            return render_to_response("sprawozdania.html", {'message':message})
            
        if dataProfil.isNauczyciel():
            dataSpr.delete()
            message=u"Usunięto sprawozdanie"
        else:
            message=u"Uczeń nie może usuwać sprawozdań!"
        return render_to_response("przedmioty.html", {'message':message, 'user':request.user})

@login_required #do zrobienia
def updSpr(request, id_spr=-1):
    return render_to_response("przedmioty.html", {'message':'Nie możesz modyfikować sprawozdania', 'user':request.user},
                                        context_instance=RequestContext(request))

@login_required
def ocenSpr(request, id_spr=-1):
    message=u"Nie możesz wystawić oceny!"
    dataProfil=reqUser(request)
    if dataProfil.isNauczyciel():
        if request.method == 'POST':
            form=Ocen(request.POST)
            if form.is_valid():
                form=form.cleaned_data
                try:
                    dataSpr=Sprawozdanie.objects.get(pk=id_spr)
                    if dataSpr.wytyczne.nauczyciel==dataProfil:
                        try:
                            ocena=Ocena.objects.get(pk=dataSpr.ocena.pk)
                        except Ocena.DoesNotExist:
                            ocena=Ocena()
                        ocena.nauczyciel=dataProfil
                        ocena.ocena=form['ocena']
                        ocena.save()
                        dataSpr.ocena=ocena
                        dataSpr.save()
                        message="Oceniono sprawozdanie o id %d na %d" % (dataSpr.pk, ocena.ocena)
                except Sprawozdanie.DoesNotExist:
                    message=u"Nie możesz wystawić oceny!"
            else:
                return render_to_response("sprawozdania.html", {'form':form, 'user':request.user}, context_instance=RequestContext(request))
        else:
            form=Ocen()
            return render_to_response("sprawozdania.html", {'form':form, 'user':request.user}, context_instance=RequestContext(request))
    return render_to_response("sprawozdania.html", {'message':message, 'user':request.user}, context_instance=RequestContext(request))

@login_required
def sprAddAuthor(request, id_profil=-1, id_sprawozdania=-1):
    if id_profil>0 and id_sprawozdania>0:
        try:
            dataSpr=Sprawozdanie.objects.get(pk=id_sprawozdania)
        except Sprawozdanie.DoesNotExist:
            message="Nie udalo się pobrać sprawozdania."
            return render_to_response("home.html", {"message":message})
        
        id_autora=Profil(user=request.user)
        if id_autora!=id_profil:
            liczba=dataSpr.autorzy.objects.filters(pk=id_profil)
            tmp=liczba.count()
            
            if tmp>0:
                try:
                    nowy=Profil(pk=id_profil)
                except Profil.DoesNotExist:
                    message="Nowy autor nie istnieje."
                    return render_to_response("home.html", {"message":message})
                
                dataSpr.autorzy.add(nowy)
                message="Dodano autora"
                return render_to_response("home.html", {"message":message})
        else:
            message="Niedozwolona operacja"
            return render_to_response("home.html", {"message":message})
        
    
        